package cn.codeforfun.gitee.api;


import cn.codeforfun.gitee.api.email.GiteeEmailService;
import cn.codeforfun.gitee.api.enterprise.GiteeEnterpriseService;
import cn.codeforfun.gitee.api.oauth.GiteeOauthService;
import cn.codeforfun.gitee.api.repo.GiteeRepoService;
import cn.codeforfun.gitee.bean.GiteeToken;
import cn.codeforfun.gitee.config.GiteeConfigStorage;

import javax.validation.Validator;
import java.io.IOException;

/**
 * 码云API的service
 *
 * @author wangbin
 */
public interface GiteeService {
    GiteeToken getToken() throws IOException;

    void refreshToken();

    /**
     * gitee配置存储接口
     *
     * @return GiteeConfigStorage
     */
    GiteeConfigStorage getGiteeConfigStorage();

    /**
     * 设置gitee配置存储接口
     *
     * @param giteeConfigStorage GiteeConfigStorage
     */
    void setGiteeConfigStorage(GiteeConfigStorage giteeConfigStorage);

    /**
     * 返回邮箱相关接口
     *
     * @return GiteeEmailService
     */
    GiteeEmailService getEmailService();

    /**
     * 返回企业相关接口
     *
     * @return GiteeEnterpriseService
     */
    GiteeEnterpriseService getEnterpriseService();

    /**
     * 返回权限相关接口
     *
     * @return GiteeOauthService
     */
    GiteeOauthService getOauthService();

    /**
     * 返回仓库相关接口
     *
     * @return GiteeRepositoryService
     */
    GiteeRepoService getRepositoryService();

    /**
     * 获取校验对象
     *
     * @return 校验对象
     */
    Validator getValidator();

    /**
     * 校验
     *
     * @param request 需要校验的请求
     */
    void validate(Object request);
}
